﻿package mortal.game.resource
{
    import com.gengine.debug.*;
    import flash.utils.*;
    import mortal.game.resource.configBase.*;

    public class ConfigCenter extends Object
    {
        private static var _map:Dictionary = new Dictionary();

        public function ConfigCenter()
        {
            return;
        }// end function

        public static function getConfigBase(param1:String) : ConfigBase
        {
            if (_map[param1] == null)
            {
                _map[param1] = new ConfigBase(param1);
            }
            return _map[param1] as ConfigBase;
        }// end function

        public static function addMainCache(param1:String, param2:String) : void
        {
            var _loc_3:* = getConfigBase(param1);
            if (_loc_3 == null)
            {
                return;
            }
            _loc_3.addMainCache(param2);
            return;
        }// end function

        public static function delMainCache(param1:String) : void
        {
            var _loc_2:* = getConfigBase(param1);
            if (_loc_2 == null)
            {
                return;
            }
            _loc_2.delMainKey();
            return;
        }// end function

        public static function addCache(param1:String, param2:Array) : void
        {
            var _loc_3:* = getConfigBase(param1);
            if (_loc_3 == null)
            {
                return;
            }
            _loc_3.addCache(param2);
            return;
        }// end function

        public static function delCache(param1:String, param2:Array) : void
        {
            var _loc_3:* = getConfigBase(param1);
            if (_loc_3 == null)
            {
                return;
            }
            _loc_3.delCache(param2);
            return;
        }// end function

        public static function getConfigItemFromCache(param1:String, param2:Array, param3:Array) : Object
        {
            var _loc_4:* = getConfigBase(param1);
            if (_loc_4 == null)
            {
                return null;
            }
            return _loc_4.getConfigFromCache(param2, param3);
        }// end function

        public static function getConfigItemFromMain(param1:String, param2:Object) : Object
        {
            var _loc_3:* = getConfigBase(param1);
            if (_loc_3 == null)
            {
                return null;
            }
            return _loc_3.getConfigFromMainCache(param2);
        }// end function

        public static function getConfigValueFromMain(param1:String, param2:Object, param3:String) : Object
        {
            var _loc_4:* = getConfigItemFromMain(param1, param2);
            if (_loc_4 == null)
            {
                return null;
            }
            return _loc_4[param3];
        }// end function

        public static function getConfigs(param1:String, param2, param3, param4:Boolean = false, param5:Dictionary = null)
        {
            var _loc_7:Array = null;
            var _loc_8:Array = null;
            var _loc_6:* = getConfigBase(param1);
            if (_loc_6 == null && param5 == null)
            {
                return [];
            }
            if (param2 is Array)
            {
                _loc_7 = param2;
            }
            else
            {
                _loc_7 = [param2];
            }
            if (param3 is Array)
            {
                _loc_8 = param3;
            }
            else
            {
                _loc_8 = [param3];
            }
            var _loc_9:* = _loc_6.getConfigs(_loc_7, _loc_8, param5);
            if (param4)
            {
                return _loc_9[0];
            }
            return _loc_9;
        }// end function

        public static function getUnionConfigs(param1:String, param2:String, param3:Array, param4:Array, param5:Array = null, param6:Array = null, param7:Array = null, param8:Array = null) : Array
        {
            var _loc_16:String = null;
            var _loc_17:Array = null;
            var _loc_18:Array = null;
            var _loc_19:int = 0;
            var _loc_20:int = 0;
            var _loc_21:int = 0;
            var _loc_22:* = undefined;
            var _loc_23:* = undefined;
            var _loc_24:Object = null;
            var _loc_25:Object = null;
            var _loc_9:* = getConfigs(param1, param5, param6);
            var _loc_10:* = getConfigs(param2, param7, param8);
            var _loc_11:Array = [];
            var _loc_12:Array = [];
            var _loc_13:Array = [];
            if (param3 == null || param3.length == 0 || param4 == null || param4.length == 0 || _loc_9.length == 0 || _loc_10.length == 0)
            {
                _loc_11.push(_loc_12);
                _loc_11.push(_loc_13);
                return _loc_11;
            }
            if (param3.length != param4.length)
            {
                Log.debug("ConfigCenter.getUnionConfigs 参数unionKeys1、unionKeys2的长度不一致");
            }
            var _loc_14:* = getHashDictionary(_loc_9, param3);
            var _loc_15:* = getHashDictionary(_loc_10, param4);
            for (_loc_16 in _loc_14)
            {
                
                _loc_17 = _loc_14[_loc_16];
                _loc_18 = _loc_15[_loc_16];
                if (_loc_18 == null || _loc_17.length == 0)
                {
                    continue;
                }
                _loc_19 = 0;
                while (_loc_19 < _loc_17.length)
                {
                    
                    _loc_20 = 0;
                    while (_loc_20 < _loc_18.length)
                    {
                        
                        _loc_21 = 0;
                        while (_loc_21 < param3.length)
                        {
                            
                            _loc_22 = param3[_loc_21];
                            _loc_23 = param4[_loc_21];
                            _loc_24 = _loc_9[_loc_19];
                            _loc_25 = _loc_10[_loc_20];
                            if (_loc_24[_loc_22] != _loc_25[_loc_23])
                            {
                                break;
                            }
                            if (_loc_21 == (param3.length - 1))
                            {
                                _loc_12.push(_loc_24);
                                _loc_13.push(_loc_25);
                                _loc_17.splice(_loc_19);
                                _loc_19 = _loc_19 - 1;
                                _loc_18.splice(_loc_20);
                                _loc_20 = _loc_20 - 1;
                            }
                            _loc_21++;
                        }
                        _loc_20++;
                    }
                    _loc_19++;
                }
            }
            _loc_11.push(_loc_12);
            _loc_11.push(_loc_13);
            return _loc_11;
        }// end function

        private static function getHashDictionary(param1:Array, param2:Array) : Dictionary
        {
            var _loc_4:Object = null;
            var _loc_5:String = null;
            var _loc_6:int = 0;
            var _loc_3:* = new Dictionary();
            for each (_loc_4 in param1)
            {
                
                _loc_5 = "";
                _loc_6 = 0;
                while (_loc_6 < param2.length)
                {
                    
                    _loc_5 = _loc_5 + _loc_4[param2[_loc_6]].toString();
                    _loc_6++;
                }
                if (_loc_3[_loc_5] == null)
                {
                    _loc_3[_loc_5] = [];
                }
                (_loc_3[_loc_5] as Array).push(_loc_4);
            }
            return _loc_3;
        }// end function

    }
}
